package com.jandar.gui;

import java.awt.Color;

import javax.swing.BorderFactory;
import javax.swing.JTextField;
import javax.swing.border.Border;
import javax.swing.text.Document;

/**
 * 文本框控件包装类。
 * 获得焦点时，边框显示黄颜色。
 * 失去焦点时，边框显示默认颜色。
 * 验证错误时，得到焦点边框显示红颜色。
 * 
 * @author pqj
 * @version 2009-6-2
 */
public class DeckTextField extends JTextField {

	/** serialVersionUID */
	private static final long serialVersionUID = -3897816714831770008L;
	/** 边框颜色为空 */
	public static final char EMPTY_BORDER_COLOR = 0;
	/** 系统默认边框颜色 */
	public static final char DEFAULT_BORDER_COLOR = 1;
	/** 获得焦点边框颜色 */
	public static final char INPUT_BORDER_COLOR = 2;
	/** 验证错误边框颜色 */
	public static final char ERROR_BORDER_COLOR = 3;
	
	/** 系统默认边框 */
	private Border defaultBorder = BorderFactory.createLineBorder(new Color(123, 158, 189));
	/** 获得焦点边框 */
	private Border inputBorder = BorderFactory.createLineBorder(Color.YELLOW);
	/** 验证错误边框 */
	private Border errorBorder = BorderFactory.createLineBorder(Color.RED);
	/** 当前边框颜色 */
	private char borderColor = EMPTY_BORDER_COLOR; 
	
	public DeckTextField() {
		super();
	}

	public DeckTextField(Document doc, String text, int columns) {
		super(doc, text, columns);
	}

	public DeckTextField(int columns) {
		super(columns);
	}

	public DeckTextField(String text, int columns) {
		super(text, columns);
	}

	public DeckTextField(String text) {
		super(text);
	}

	/**
	 * 取得当前边框颜色。
	 * 
	 * @return 当前边框颜色
	 */
	public char getBorderColor() {
		return borderColor;
	}
	
	/**
	 * 设置当前边框颜色。
	 * 
	 * @param borderColor 边框颜色
	 */
	public void setBorderColor(char borderColor) {
		this.borderColor = borderColor;
	}

	/**
	 * 清除边框颜色。
	 */
	public void clearBorderColor() {
		this.borderColor = EMPTY_BORDER_COLOR;
	}
	
	/**
	 * 当前边框颜色是否为空。
	 * 
	 * @return true:是为空
	 */
	public boolean isEmptyBorderColor() {
		return this.borderColor == EMPTY_BORDER_COLOR;
	}
	
	/**
	 * 重画边框。
	 */
	public void rePaintBorderColor() {
		switch(borderColor) {
			case DEFAULT_BORDER_COLOR:
				this.setBorder(defaultBorder);
				break;
			case INPUT_BORDER_COLOR:
				this.setBorder(inputBorder);
				break;
			case ERROR_BORDER_COLOR:
				this.setBorder(errorBorder);
				break;
		}
		
		clearBorderColor();
	}
	
	/**
	 * 画边框。
	 * 
	 * @param borderColor 边框颜色
	 */
	public void paintBorderColor(char borderColor) {
		setBorderColor(borderColor);
		rePaintBorderColor();
	}
	
	/**
	 * 获得输入焦点回调函数。
	 */
	public void inputFocusCallback() {
		if (this.isEmptyBorderColor()) {
			this.paintBorderColor(DeckTextField.INPUT_BORDER_COLOR);
		} else {
			this.rePaintBorderColor();
		}
	}
	
	/**
	 * 失去输入焦点回调函数。
	 */
	public void defaultFocusCallback() {
		this.paintBorderColor(DeckTextField.DEFAULT_BORDER_COLOR);
	}
	
	/**
	 * 失去焦点并验证错误回调函数。
	 */
	public void errorFocusCallback() {
		this.setBorderColor(DeckTextField.ERROR_BORDER_COLOR);
		this.requestFocus();
	}
}
